約 893,287 件
https://w.atwiki.jp/magamorg/pages/6007.html
斬龍大将キリサメ 闇 C 7 6000+ デーモン・コマンド/サムライ ■ドラゴンは、可能であればこのクリーチャーを攻撃する。 ■ドラゴンとバトルする時、このクリーチャーのパワーは+7000される。 ■W・ブレイカー F その大刀は龍を斬り裂き討ち取る為に叩かれた邪刀。 作者:匿名 収録 《「終戦」》
https://w.atwiki.jp/htl22/pages/24.html
今すぐroot化してみんなの人柱になってよ!(保証しません) おまえがやれアホ
https://w.atwiki.jp/koiru/pages/36.html
簡単にまとめてみた poke.exe Perl版 poke.exe 1.解凍する 2.[poke.exe]を実行する 3.コイル(゚Д゚ )ウマー ほかのポケモンにする[setting.ini]を開く choice= の部分をいじる(8コイル 7ジバコイル 9タテトプス) 再起動 (゚Д゚ )ウマー 鯖をかえてみる[PostURL][CookieSetURL]をそれぞれ同じ値に変える Perl版 1.Perlをインスコする 2.ファイルを指定して 3.実行(゚Д゚ )ウマー
https://w.atwiki.jp/news4vipper/pages/12.html
https://w.atwiki.jp/cimnptvy1156/pages/79.html
大ぷよ(でかぷよ)の使い方 リミルです。こんにゃくさんの文章を自分なりに練り直しました。 大ぷよはフィバをやる上では避けては通れない、非常に重要なツモです。 基礎事項 4個同色のぷよが大ぷよ。 Aボタンで 青→黄→赤→緑 の順に色が変わる。Bボタンだと逆順。 色変えは高速落下のままできる事が望ましい。 キャラ決めの前に 大ぷよが来る回数 ツモ順の中での大ぷよの位置 ぐらいはチェックしておくこと。 (特徴のあるキャラ達) ラフィーナ、おにおん: 初回の大ぷよが6手目と早めである。 小ツモキャラなので、この大ぷよを無駄消ししてしまうと、スピード面で圧倒的に不利になる。 従って、早い段階で受け場所を確保しておく必要がある。 あくま、ナス: 中盤以降(8手目以降)に集中しており、1巡中に3回も降ってくる。 連鎖尾で同時消しにするか、副砲に用いることが多いと思われる。 たら、ルルー、サタン: 8手目・16手目・24手目・・・とやや短めのスパンで、コンスタントに降って来る。 感覚的にも大ぷよが降ってくるタイミングを把握しやすい。 幽霊、フェーリ、バル、レムレス: 初回が3~4手目と異常に早い。 また、初手全消しが取りやすい。 アルル: そもそも多ツモが無いっ。。 大ぷよの利用法 ▼(1) 折り返しに用いる ▼(2) 連鎖尾に用いる ▼(3) 副砲に用いる ▼(4) 発火する前のちょっとした伸ばし ▼(5) ごみぷよを掃除する <1.折り返しに用いる> 二色連鎖を考慮しておくと簡単に折り返しの増強ができる。 http //www.inosendo.com/puyo/rensim/??440000440000000000600000600000400000600044656774445667455674 GTRのL字部分に使う場合。例えば以下のように伸ばしていくとよい。 http //www.inosendo.com/puyo/rensim/??440000440000000000000000000000000000000004056744045677556674 http //www.inosendo.com/puyo/rensim/??400000700000700000400000740000740004456744445677556674 GTRの上に縦3で置いてしまった場合は大ぷよの出番。めくりの要領で綺麗に折り返せる。 http //www.inosendo.com/puyo/rensim/??660000660000000000000000000000700000700000700004456744445677556674 http //www.inosendo.com/puyo/rensim/??400000600000670000750000765000765004456744445677556674 下はダメな例。形が悪くなってしまっている。 http //www.inosendo.com/puyo/rensim/??400000700000600000600000760000760000760004456744445677556674 最近私がよくやる折り返し。組みやすく、低めに折り返せるので、上の空間が自由に使えるようになる。(潰しには弱いかも) http //www.inosendo.com/puyo/rensim/??660000660000000000000000000000000000070004056744445677556674 http //www.inosendo.com/puyo/rensim/??460000467000677004656744445677556674 大ぷよが早めに来るキャラなら階段の先折りが手早く組める。 http //www.inosendo.com/puyo/rensim/??770000770000000000000000000000000000700000400600405600475640 この手法を“裏リデル”と呼ぶ。おにおん、リデル辺りでやるとやりやすい。 更に折り返しを大ぷよで増強可能。 http //www.inosendo.com/puyo/rensim/??440000440000000000000000700000400000700000700000756400475640475640475640 <2.土台・連鎖尾に用いる> 当然だが、2マス以上の段差を予め作っておかなければならない。 http //www.inosendo.com/puyo/rensim/??44000044000000000000000000000000000005456705445664556774 下の土台では大ぷよを使いたくても使いようがない。 http //www.inosendo.com/puyo/rensim/??44000044000000000000000000000000000005456075445664556774 慣れないうちは単純な2-2階段で受ける事をオススメする。但し暴発には注意。 http //www.inosendo.com/puyo/rensim/??44000044000000000000000000000000000700456700445670556670 ぞろ目→大ぷよ と来る場合の捌き方。段差が既に1~2段ある場合は、ぞろ目は寝かせて使い、後で回収すれば良い。 http //www.inosendo.com/puyo/rensim/??55000055000000000000000044000000000000000700456700445670556670 http //www.inosendo.com/puyo/rensim/??54000754456745445675556674 色の選択。全消し狙いでなければ、なるべくフィールド上で使われていない色(もしくはNextに無い色)を選ぶのがよい。 http //www.inosendo.com/puyo/rensim/??6600006600000000000000000000000000450000445000557000 鍵土台では1-1-2と2-1-1の組みあわせも考慮すると楽に組める。千切ったぷよは連鎖尾へ。 http //www.inosendo.com/puyo/rensim/??5500005500000000000000066000000000000000000000000006000746000544000776005746 http //www.inosendo.com/puyo/rensim/??505000556005746005544006776065746 連鎖尾拡張のやり方。でかぷよを上手く使えたうえ、右端がやや底上げされているので第二折り返しも組みやすくなる。 http //www.inosendo.com/puyo/rensim/??55000055000000000000000007700007600000600000775400766544655477 大ぷよはなるべく端に置いたほうが良いという例。中央に置くと盛り上がってしまい、形が悪くなりやすい。 http //www.inosendo.com/puyo/rensim/??4400004400000000000000056000445060455670 http //www.inosendo.com/puyo/rensim/??44000044000000000000056000445060455670 めくりの要領で更に伸ばせる。 http //www.inosendo.com/puyo/rensim/??66000066000000000000000005000007000047056047445664455674 逆L字は土台で大ぷよを受ける形にもっていきやすい(らしい)。 http //www.inosendo.com/puyo/rensim/??77000077000000000000000000000000000000056060445670455660 http //www.inosendo.com/puyo/rensim/??70000676056766445677455667 ちょっと夢のある形。 http //www.inosendo.com/puyo/rensim/??66000066000000000000000000000500000540000460000447000556000 面白そうな例。DSでは難しいと思うけど、ポポイやゴゴットとかなら割と簡単に組めるかも。 http //www.inosendo.com/puyo/rensim/??55000055000000000077000077000000000066000066000000000000000005000005004445 http //www.inosendo.com/puyo/rensim/??6000056000067000067004075000075000057000057000076000076000065000065004445 <3.副砲に用いる> 同色連鎖を含む2連鎖。大ぷよの特性を上手く活かしている。 http //www.inosendo.com/puyo/rensim/??440000440000000400000700000760074650074765045765047456747445674556677 不発弾もお手のもの。一度に2列以上のお邪魔を降らすことが可能である。 http //www.inosendo.com/puyo/rensim/??550000550000000000005400005700005760056650056765065765564456744445677556674 もちろんヘルファイヤーの準備にも最適。 http //www.inosendo.com/puyo/rensim/??66000066000000000000400040700040760074650074765045765047456747445674556677 <4.発火前のちょっとした伸ばし> たった一手追加するだけで+1連鎖。アルルでは決して出来ない芸当だ。 ネクネクを見つつ色を変えるのがポイント。 http //www.inosendo.com/puyo/rensim/??60000050000000000550500550647000477000646600647607676547557544576657676547 http //www.inosendo.com/puyo/rensim/??55000055000000000000700000500000064000777474544655646777565665745644577455755 http //www.inosendo.com/puyo/rensim/??550000550000700000500000000000570000770000560000550654460654660754457575445574 http //www.inosendo.com/puyo/rensim/??5000004000000000000000660055540055640000640000675750567570567570567570 時間制限のあるフィーバー中においては必須の伸ばしテクニックである。 <5.ごみぷよの掃除に用いる> 回収できそうにないぷよや、暴発の原因となるぷよを取り除く。 http //www.inosendo.com/puyo/rensim/??440000440000000000004400056700776765475654665765465765454456744445677556674 また、キーぷよを外す時にも使える。 http //www.inosendo.com/puyo/rensim/??55000055000000000000000400056700776765475654665765465765454456744445677556674 いうまでもなく発火直前に使うテクニックであって、試合序盤の単発消しは避けたほうがよい。 <番外編 やってはいけないこと> 全消しでも無いのに、序盤で大ぷよを単発消しする。 http //www.inosendo.com/puyo/rensim/??7700007700000000000000000000000000400000445000556600 無理に受けて愚形になってしまう。 http //www.inosendo.com/puyo/rensim/??4400004400000000000000000000007000456000445644556645 大ぷよは置くだけでプラス1連鎖だから効率よく使おう!(焔竜さんの格言より) ← フィーバーのまとめページに戻る 参考リンク リデル14連鎖全消し(YouTube) リデル14連鎖(YouTube) でかぷよで+1連鎖(YouTube) 合体サブマリン14連鎖(YouTube) ご意見、感想、ツッコミ、苦情、その他諸々は以下に。。 名前 コメント (元にしたこんにゃくさんの記事) こんにゃくがフィバとなめもあることだし作りました でかぷよはFをやる点で非常に重要です(たぶん。。) まあとりあえず焔竜さんのhttp //akaryu.blog56.fc2.com/blog-entry-53.html見とくといいです 下の図でこんな状況で等で宙に浮いてるぷよはツモと思ってください。 下にあるほど先のツモで^^; 基本 その1 裏リデル ってやつです その2 ちょっとした伸ばし その3 折り返しで全般で その4 GTRで その4の場合[[こんな折り返しを考えときましょう こんなの 実用編? 鍵で こんな状況 (念のため言うとネクが黄ゾロ、ネクネクがでかぷよ) こうする 1-1-2と2-1-1を組みあわせることができるようになれば鍵は卒業です。鍵練習中or鍵できないって人はこれである程度は何とかなるんじゃないかと^^; GTRでこんなとき 普通に挟んで伸ばすことしか頭に入ってないと形が悪くなります ダメな例 そこででかぷよ 逆に言えばこの形が頭に入っていればGTRの上に縦3で置いても綺麗に組めるってことです。 こんな場合 こうしよう でかぷよを上手く使えたうえ、右端がやや底上げされているので第二折り返ししやすいです。一石二鳥w こんな場合 これ だと真ん中が高くなって2段目が組みにくい^^; だからこう 微妙にL字も頭に入れときましょう 右端の溝をもぐりこませてある黄色で連鎖尾にして埋めれば2段目が楽です。 更に発展 でかぷよでめくりみたいな感じですね。 まだ伸ばしたい場合は青で。 またもやL字 こうしましょう 誰でも知ってるよとかアルル使うからかんけえねえよ等の苦情感想 は↓に
https://w.atwiki.jp/kyanro_tools/pages/30.html
使い方 多分直感でわかるとはおもいますが、一応。 AoE3RecView.exeを実行する。 参照ボタンを押してファイルを選択する、または、データ表示領域にファイルをひとつだけドロップする。 リストボックスにファイルを複数ドロップして、表示したいファイルをクリック。 TADのみに対応しています。(無印やTWCのファイルを利用して動作テストを行っていません)
https://w.atwiki.jp/forns/pages/17.html
そもそもAviutlとは いろんなことができる無料動画編集ソフトのこと。 読み方は「エーブイアイユーティーエル」か「エーブイアイユーティル」。 どちらでもよい。 ただWindowsでしか動作しないから注意。 入れたほうがいいもの Aviutl本体 拡張編集プラグイン この2つは絶対に入れましょう。 それ以外に L-SMASH Works DirectShow File Reader のいずれかを適応させなくてはいけません。 なんで?→Aviutl単体では.aviや.wavファイルしか読み込めないからです 上記2つのどちらか(あるいはどちらも)を適応させることで初めて.mp3や.mp4が読み込めるようになります。 大きなこだわりがなければ、L-SMASH Worksのほうが安定しているのでそちらを使いましょう。 また既存の状態だと.aviの拡張子でしか出力できないので x264guiEx を使用したほうがいいでしょう(筆者はx265の良さがわからんかった) ってことで次からは軽くDLのやり方を・・・ DLの仕方 Aviutlと拡張編集プラグイン 検索エンジンで「Aviutlのお部屋」と検索しましょう。 サイトに飛んだら一番上のAviutlの最新版 と拡張編集Pluginの最新版 をDLしましょう。 (2023/08/16時点の最新版はAviutl110.zipとexedit92.zip) L-SMASH Works 検索エンジンで「L-SMASH Works」と検索しましょう。 RePOPnというサイトが一番上に出てくると思います。 そのサイトを開いて少しスクロールしたところにあるダウンロードを探します。 一番上のL-SMASH Works rxxx (release x)というファイルをDLしましょう。 (2023/08/16時点の最新版はL-SMASH Works r940 release1) DirectShow File Reader 検索エンジンで「DirectShow File Reader」と検索しましょう。 Aviutl実験室のサイトのものが一番上に出てくると思います。 上のほうにダウンロードって書いてあるのを探します。 んでds_inputxxxa.lzhをDLします。 (2023/08/16時点の最新版はds_input026a.lzh) x264guiEx 検索エンジンで「x264guiEx」と検索しましょう。 一番上のrigayaの日記兼メモ帳に飛びます。 真ん中にあるダウンロード、又は右側のメニューバーからx264guiEx.x.xxに飛びます。 (2023/08/16時点の最新版はx264guiEx.3.xx) そうするとGitHubに飛ぶので、そこで一番上の最新版をDLしましょう。 (2023/10/01時点の最新版は3.23) プラグインの適応方法 まずCドライブおあDドライブ直下にAviutlフォルダを作ります。 そんでAviutl.exeがあるフォルダの中に拡張編集プラグインの中身を全部ぶち込みます。 次に「Plugins」フォルダを作ってL-SMASH Works File ReaderやDirectShow File Readerを入れましょう。 ↓ ↓ ↓ ↓ ↓ ↓ (上、L-SMASH Worksの場合) (上、DirectShow File Readerの場合) もし2つとも導入する場合はどちらも同じフォルダにぶち込みましょう。 このままx264guiExもやっちゃいましょう。 Readmeを見れば書いてますが、一応説明をば DLしたファイルの中身を解凍しないでAviutlフォルダにコピー。以上。 終わり! 初期設定 (上、L-SMASH Works・DirectShow File Reader・x264guiEx全てを導入した場合) その他プラグインは自分でぶち込みたい奴を作ったPluginsフォルダに突っ込みましょう。大体なんとかなります。 わからんかったら自分で調べてね。多分Readmeなりなんなりで書いてると思うよ。 ってことで次はゆるゆるっと初期設定やな。 これが終わったらあとは編集の方法や・・・! 初期設定 とりあえずAviutlを起動しましょう。 中身の設定をゆるゆるっとやっていきます。 ファイル→環境設定→システムの設定 で開いたウィンドウの「再生ウィンドウの動画再生をメインウィンドウに表示する」にはチェックしときましょう。 その次に ファイル→入力プラグインの優先度の設定 でAVI/AV2→自分が導入した入力プラグイン→拡張編集に順番を入れ替えます。 それが済んだらAviutlを再起動しましょう。 使い方 Aviutlを起動して設定→拡張編集の設定を開きます。 これで所謂タイムラインとかいうのが表示できました。 そのままゆるっと使ってみましょう。 タイムライン上で右クリック→新規プロジェクトの作成をクリック 画面サイズは自分が作りたいサイズで フルHDなら1920*1080で。ハーフHDなら1280*720で。 フレームレートも30or60お好みで選択してください。 これで起動できました。 詳しい説明は他のサイト見てください。絶対そっちのがいいです。 タイムライン上で右クリック→メディアオブジェクトの追加でいろんなものが追加できます。 色々いじって遊んでみましょう。
https://w.atwiki.jp/sedoriking/pages/19.html
電脳せどりの使い方 オンライン上でせどりが完結できます。 せどりしたい商品を検索すれば各ネットショップの価格の一覧表が表示されます。 安価なショップから商品を仕入れ、高価でアマゾンに出品しましょう! 基本機能 1.検索したい商品のカテゴリ(a.)、ジャンル(b.)、サブジャンル(c.)を選択 2.検索結果(g.)に何の順位で表示するかを選びます(d.) 3.検索結果(g.)に何件の商品を表示するかを選びます(e.) 4.検索したいキーワード、商品名などを入力(f.)し検索ボタンをクリックすると 検索結果(g.)が表示されます 5.詳細ページ(h.)をクリックすると各ショップの商品ページが表示されます ■その他の機能 例えばキーワードは空欄のまま人気商品を検索することもできます。 1.カテゴリーを選択(a.) →どんな人気商品を見つけたいかカテゴリーを指定します。 2.ランキング順位を変える(b.) →指定したカテゴリのアマゾンランキングにおけるランキング順位以内の商品を検索できます。 3.検索結果には、 図の例では「Amazonベストセラー商品ランキング:本」の中で100位以内にランクインした 「本・漫画・雑誌」カテゴリーに分類される商品が表示されます。 100件中、「本・漫画・雑誌」カテゴリーに分類される商品の最も上位が35位にランクインした商品 であることがわかります。 また、キーワードによっては商品のヒット数が多いものもあります。 そんな時は以下の機能を使って、せどり価値の高い商品を見つけましょう! 1.中古出品数の少ない商品を検索することができます(a.) 2.新品在庫がない商品を検索することができます(b.) 3.Amazon ランキングの順位を指定して検索することができます(c.) 以上の機能を組み合わせて検索することも可能です!
https://w.atwiki.jp/thiroyoshi/pages/29.html
MPIの使い方や、動作の仕方といったことのメモ MPIとは? MPIは「Message Passing Interface」ってもので、要するにメッセージでの送受信を行いノード間の協調を図るもの。 これ自体がプログラミング言語なのではなく、ライブラリである。 使用する際には、「mpi.h」または「mpi++.h」をインクルードする必要がある。 メッセージの送受信には用意されている関数を用いる。これにも色々な方法があるよう。 MPIの動作 基本的にMPIを使用する用にコンパイルしたものは、指定したノードの数で実行される。(ノードの数の指定はシェルスクリプトで) 各ノードで実行されるプログラムは実際には同じものが動いている。つまり、すべてmain関数から処理を行っている。 では、何が利点か?それは、各ノードにはプロセス毎にノードの番号(rank)が割り当てられており、これによってif文などを用いて処理の分担を行う。 つまり、MPIは「並列処理」というよりも「分散処理」という側面が強いとも言える。 MPIの使い方 とりあえずサンプルを載せる。 #include stdio.h #include string.h #include iostream #include "mpi++.h" using namespace std; int main(int argc, char* argv[]){ int my_rank; //ノードの番号 int p; //すべてのノードの合計数 int source; //メッセージの送信元番号 int dest; //メッセージの送信先番号 int tag = 0; //メッセージタグ char message[100]; //メッセージ MPI_Status status; MPI_Init( argc, argv); //MPI関数を呼び出すための初期化 MPI_Comm_rank(MPI_COMM_WORLD, my_rank); //今プログラムが走っているノードの番号(rank)を取得 MPI_Comm_size(MPI_COMM_WORLD, p); //ノードの合計数を取得 //printf("Hello! %d\n", my_rank); //cout "Hello! " my_rank endl; //rankが0でないノードでのみ実行する if(my_rank != 0){ //メッセージに以下の文を格納する sprintf(message, "Greetings from process %d", my_rank); //printf("My rank is %d\n", my_rank); //cout "My rank is " my_rank endl; dest = 0; //0ノードに送信先を設定 //0ノードにmessageを送信 MPI_Send(message, strlen(message)+1, MPI_CHAR, dest, tag, MPI_COMM_WORLD); } //0ノードで実行される else{ //全ノード分ループをまわす for(source = 1; source p; source++){ //source番目のノードからmessageを受け取り、 MPI_Recv(message, 100, MPI_CHAR, source, tag, MPI_COMM_WORLD, status); //表示 printf("%s\n", message); //cout message endl; } } //最後の処理 MPI_Finalize(); } 出力結果 %NQSII(INFO) ------- Output from job 0000 ------- Warning no access to tty (Bad file descriptor). Thus no job control in this shell. [0] Greetings from process 1 [0] Greetings from process 2 [0] Greetings from process 3 [0] Greetings from process 4 [0] Greetings from process 5 [0] Greetings from process 6 [0] Greetings from process 7 [0] Greetings from process 8 [0] Greetings from process 9 %NQSII(INFO) ------- Output from job 0001 ------- %NQSII(INFO) ------- Output from job 0002 ------- %NQSII(INFO) ------- Output from job 0003 ------- %NQSII(INFO) ------- Output from job 0004 ------- 出力の左端[0]は、0ノードでの出力を表している 各ノードでmain関数がそのまま流れており、if文でmy_rankを判定材料として処理を分担している。 各ノードは0ノードにメッセージを送り、0ノードはそれらを逐一読み取り、表示している。 どのメッセージをどこで受信するかを示すもの →つまり、このタグが合うところでのみメッセージの受信ができる 上記のサンプルで、コメントアウトしているprintfとcoutがある。 →printfはしっかり出力をするが、coutは他のスレッドの割り込みを禁止することができていないようで、表示が割り込まれることがあるので使用しないことをオススメする printfをコメントアウトしなかった場合の出力は以下 %NQSII(INFO) ------- Output from job 0000 ------- Warning no access to tty (Bad file descriptor). Thus no job control in this shell. [0] Hello! 0 [1] Hello! 1 [1] My rank is 1 [0] Greetings from process 1 [0] Greetings from process 2 [0] Greetings from process 3 [0] Greetings from process 4 [0] Greetings from process 5 [0] Greetings from process 6 [0] Greetings from process 7 [0] Greetings from process 8 [0] Greetings from process 9 %NQSII(INFO) ------- Output from job 0001 ------- [2] Hello! 2 [3] Hello! 3 [3] My rank is 3 [2] My rank is 2 %NQSII(INFO) ------- Output from job 0002 ------- [4] Hello! 4 [4] My rank is 4 [5] Hello! 5 [5] My rank is 5 %NQSII(INFO) ------- Output from job 0003 ------- [6] Hello! 6 [6] My rank is 6 [7] Hello! 7 [7] My rank is 7 %NQSII(INFO) ------- Output from job 0004 ------- [8] Hello! 8 [8] My rank is 8 [9] Hello! 9 [9] My rank is 9 各ノードでの出力がどれになっているか注意 また、スパコンでのMPIのプログラムの出力は、outputのファイルはできない。 出力結果は、実行後に作成される「run.sh.o(ジョブID)」というファイルに書き込まれている。 また、同時に出力されている「run.sh.e(ジョブID)」はエラー関係が出力されている。 さらにシェルスクリプトを紹介 #PBS -l cputim_job=00 05 00 //cpu動作時間 #PBS -l memsz_job=2gb //メモリサイズ #PBS -l cpunum_job=2 //使用コア数 #PBS -T vltmpi #PBS -b 5 //ノード数 #PBS -q PCL-B //使用マシン cd MPI_sample //ディレクトリ移動 mpirun_rsh -np 10 ${NQSII_MPIOPTS} ./a.out //数字の10は(ノード数)×(CPUコア数) 内積 これには、MPI_Reduce()という関数を使う。とりあえずサンプル。 #include stdio.h #include string.h #include"mpi++.h" using namespace std; //内積を実際に計算する関数(局所的な計算) int Serial_dot(int x[], int y[], int n){ int i; int sum = 0; for(i = 0; i n; i++) sum = sum + x[i]*y[i]; return sum; } //各ノードの内積をまとめる関数 //各ノードでSerial_dot()でそれぞれの内積を求めて、MPI_Reduce()でまとめる //0ノード以外の返り値は0 int Parallel_dot(int local_x[], int local_y[], int n_bar){ int local_dot; int dot = 0.0; int Serial_dot(int x[], int y[], int m); local_dot = Serial_dot(local_x, local_y, n_bar); printf("local_dot = %d\n", local_dot); MPI_Reduce( local_dot, dot, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD); return dot; } int main(int argc, char* argv[]){ int n = 20; //全配列数 int my_rank; //ノード番号 int p; //全ノード数 //MPIの初期化 MPI_Init( argc, argv); //ノード番号取得 MPI_Comm_rank(MPI_COMM_WORLD, my_rank); //全ノード数取得 MPI_Comm_size(MPI_COMM_WORLD, p); int n_bar = n/p; //各ノードでの配列数 int x[n_bar]; int y[n_bar]; int dot; //求める内積 //printf("n_bar = %d\n", n_bar); //初期値設定 for(int i = 0; i n_bar; i++){ x[i] = my_rank; y[i] = my_rank; } //各ノードでの内積計算 dot = Parallel_dot(x,y,n_bar); //if(my_rank == 0) printf("dot = %d\n", dot); MPI_Finalize(); } 出力結果 %NQSII(INFO) ------- Output from job 0000 ------- Warning no access to tty (Bad file descriptor). Thus no job control in this shell. [0] local_dot = 0 [1] local_dot = 2 [1] dot = 0 [0] dot = 570 %NQSII(INFO) ------- Output from job 0001 ------- [2] local_dot = 8 [3] local_dot = 18 [3] dot = 0 [2] dot = 0 %NQSII(INFO) ------- Output from job 0002 ------- [4] local_dot = 32 [5] local_dot = 50 [5] dot = 0 [4] dot = 0 %NQSII(INFO) ------- Output from job 0003 ------- [6] local_dot = 72 [7] local_dot = 98 [7] dot = 0 [6] dot = 0 %NQSII(INFO) ------- Output from job 0004 ------- [8] local_dot = 128 [9] local_dot = 162 [9] dot = 0 [8] dot = 0 MPI_Reduce() 計算を行い、指定した根ノードにのみ計算結果を返す。 そのため、他の各ノードでは返り値は0である。 各引数は次のようになっている。 int MPI_Reduce( void operand, //計算したい値のポインタ void result, //計算した結果を保存するポインタ int count, //データをいくつ送るか(数字1つなら1) MPI_Datatype datatype, //送信するデータの型(上ではMPI_INT) MPI_Op operator, //なんの計算をするか(上では総和をとるのでMPI_SUM) int root, //根ノードの番号(0でよい) MPI_Comm comm //特になにもなければMPI_COMM_WORLDでよい ){} MPI_Opについては定義済み操作が多く存在する。それらに関しては、windowsサーバに置いてあるMPIの教科書(p81)を参照のこと 計算結果が格納されるのは、rootに指定したノードでのresultにのみ。 MPI_Allreduce() MPI_Reduce()では根以外のノードでの返り値が0であったが、これでは全てのノードに計算結果を返すことができる。 引数はほぼMPI_Reduce()と同じ。 int MPI_ALLreduce( void operand, //計算したい値のポインタ void result, //計算した結果を保存するポインタ int count, //データをいくつ送るか(数字1つなら1) MPI_Datatype datatype, //送信するデータの型(上ではMPI_INT) MPI_Op operator, //なんの計算をするか(上では総和をとるのでMPI_SUM) MPI_Comm comm //特になにもなければMPI_COMM_WORLDでよい ){} 上記のサンプルプログラムで、MPI_Reduce()をMPI_AllReduce()にしたときの出力結果を示す %NQSII(INFO) ------- Output from job 0000 ------- Warning no access to tty (Bad file descriptor). Thus no job control in this shell. [0] local_dot = 0 [1] local_dot = 2 [0] dot = 570 [1] dot = 570 %NQSII(INFO) ------- Output from job 0001 ------- [2] local_dot = 8 [3] local_dot = 18 [2] dot = 570 [3] dot = 570 %NQSII(INFO) ------- Output from job 0002 ------- [4] local_dot = 32 [5] local_dot = 50 [5] dot = 570 [4] dot = 570 %NQSII(INFO) ------- Output from job 0003 ------- [6] local_dot = 72 [7] local_dot = 98 [7] dot = 570 [6] dot = 570 %NQSII(INFO) ------- Output from job 0004 ------- [8] local_dot = 128 [9] local_dot = 162 [9] dot = 570 [8] dot = 570 行列とベクトルの積 マトリクスとベクトルの積を並列に行うプログラム。 #include stdio.h #include string.h #include vector #include"mpi++.h" using namespace std; vector double MV(vector vector double iterator local_A, int m, int n, vector double iterator local_x, int local_m, int local_n){ vector double local_y; //計算用の一時変数 local_y.resize(local_n); vector double global_x; //ベクトル全体 global_x.resize(n); vector double global_y; //計算結果のベクトル global_y.resize(n); //各プロセスからベクトルxを集める MPI_Allgather(local_x, local_n, MPI_DOUBLE, global_x.begin(), local_n, MPI_DOUBLE, MPI_COMM_WORLD); //掛け算 for(int i = 0; i local_m; i++){ local_y[i] = 0.0; for(int j = 0; j n; j++) local_y[i] = local_y[i] + local_A[i][j]*global_x[j]; } //計算結果を集める MPI_Allgather(local_y.begin(), local_n, MPI_DOUBLE, global_y.begin(), local_n, MPI_DOUBLE, MPI_COMM_WORLD); return global_y; } int main(int argc, char* argv[]){ int n = 20; int m = 20; int my_rank; int p; MPI_Init( argc, argv); MPI_Comm_rank(MPI_COMM_WORLD, my_rank); MPI_Comm_size(MPI_COMM_WORLD, p); int local_n = n/p; int local_m = m/p; vector double x; vector vector double A; //掛け算する行列(各プロセスで一部ずつをもつ) A.resize(local_m); x.resize(local_n); //掛け算するベクトル(各プロセスで一部ずつをもつ) for(int i = 0; i local_m; i++) A[i].resize(n); for(int a = 0; a local_m; a++){ x[a] = my_rank; for(int b = 0; b n; b++) A[a][b] = 1.0; } //行列×ベクトル vector double y; y = MV(A.begin(),m,n,x.begin(),local_m,local_n); for(int i = 0; i n; i++) printf("y[%d] = %f\n",i,y[i]); MPI_Finalize(); } すぐに使えるであろう関数の形にまで落としこんだ。 行列×ベクトルを行っている部分をこれで置き換えれば、それで事足りるはず。 詳細な仕様はここには書きづらいので、直接聞いてもらえるといいかも。もちろんプログラムから察してくれれば一番だが。 が、簡単に書いておく ・行列A n×n行列。行方向で区切ったものを各プロセスでもつ。つまりlocal_Aはlocal_m×n行列になっている。 ・ベクトルx n行ベクトル。行方向で区切った部分を各プロセスでもつ。つまり各プロセスではlocal_m行のベクトル。 ・プロセス数と行数・列数 当然のことながら、行数・列数はプロセス数で割り切れなければならない。 最後に取得するベクトルyはn行の完全なベクトルになっている。上記のプログラムの出力結果は以下。 プロセス数10・行数列数20で計算 %NQSII(INFO) ------- Output from job 0000 ------- Warning no access to tty (Bad file descriptor). Thus no job control in this shell. [0] y[0] = 90.000000 [0] y[1] = 90.000000 [0] y[2] = 90.000000 [0] y[3] = 90.000000 [0] y[4] = 90.000000 [0] y[5] = 90.000000 [0] y[6] = 90.000000 [0] y[7] = 90.000000 [0] y[8] = 90.000000 [0] y[9] = 90.000000 [0] y[10] = 90.000000 [0] y[11] = 90.000000 [0] y[12] = 90.000000 [0] y[13] = 90.000000 [0] y[14] = 90.000000 [0] y[15] = 90.000000 [0] y[16] = 90.000000 [0] y[17] = 90.000000 [0] y[18] = 90.000000 [0] y[19] = 90.000000 [1] y[0] = 90.000000 [1] y[1] = 90.000000 [1] y[2] = 90.000000 [1] y[3] = 90.000000 [1] y[4] = 90.000000 [1] y[5] = 90.000000 [1] y[6] = 90.000000 [1] y[7] = 90.000000 [1] y[8] = 90.000000 [1] y[9] = 90.000000 [1] y[10] = 90.000000 [1] y[11] = 90.000000 [1] y[12] = 90.000000 [1] y[13] = 90.000000 [1] y[14] = 90.000000 [1] y[15] = 90.000000 [1] y[16] = 90.000000 [1] y[17] = 90.000000 [1] y[18] = 90.000000 [1] y[19] = 90.000000 … … ‥(以下同様) 行列と行列の積 一応できた。早いかはしらんw #include stdio.h #include string.h #include vector #include"mpi++.h" using namespace std; vector vector double MV(vector vector double iterator local_A, int m, int n, vector vector double iterator local_x, int local_m, int local_n){ vector double local_y; local_y.resize(local_n); vector double global_x; global_x.resize(n); vector vector double global_y; global_y.resize(n); for(int i = 0; i n; i++) global_y.resize(n); vector double global_tmp; global_tmp.resize(n); for(int k = 0; k n; k++){ MPI_Allgather(local_x[k].begin(), local_n, MPI_DOUBLE, global_x.begin(), local_n, MPI_DOUBLE, MPI_COMM_WORLD); for(int i = 0; i local_m; i++){ local_y[i] = 0.0; for(int j = 0; j n; j++) local_y[i] = local_y[i] + local_A[i][j]*global_x[j]; } MPI_Allgather(local_y.begin(), local_n, MPI_DOUBLE, global_tmp.begin(), local_n, MPI_DOUBLE, MPI_COMM_WORLD); global_y[k] = global_tmp; } return global_y; } int main(int argc, char* argv[]){ int n = 20; int m = 20; int my_rank; int p; MPI_Init( argc, argv); MPI_Comm_rank(MPI_COMM_WORLD, my_rank); MPI_Comm_size(MPI_COMM_WORLD, p); int local_n = n/p; int local_m = m/p; vector vector double A; vector vector double x; A.resize(local_m); for(int i = 0; i local_m; i++) A[i].resize(n); x.resize(n); for(int i = 0; i n; i++) x[i].resize(local_m); for(int a = 0; a local_m; a++){ for(int b = 0; b n; b++){ A[a][b] = 1.0; x[b][a] = my_rank; } } vector vector double y; y = MV(A.begin(),m,n,x.begin(),local_m,local_n); for(int i = 0; i n; i++){ for(int j = 0; j m; j++) printf("y[%d][%d] = %f\n",j,i,y[j][i]); } MPI_Finalize(); } 出力結果 %NQSII(INFO) ------- Output from job 0000 ------- Warning no access to tty (Bad file descriptor). Thus no job control in this shell. [0] y[0][0] = 90.000000 [1] y[0][0] = 90.000000 [1] y[1][0] = 90.000000 [1] y[2][0] = 90.000000 [1] y[3][0] = 90.000000 [1] y[4][0] = 90.000000 [1] y[5][0] = 90.000000 [1] y[6][0] = 90.000000 [1] y[7][0] = 90.000000 [1] y[8][0] = 90.000000 [1] y[9][0] = 90.000000 [1] y[10][0] = 90.000000 [1] y[11][0] = 90.000000 [1] y[12][0] = 90.000000 [1] y[13][0] = 90.000000 [1] y[14][0] = 90.000000 [1] y[15][0] = 90.000000 [1] y[16][0] = 90.000000 [1] y[17][0] = 90.000000 [1] y[18][0] = 90.000000 [1] y[19][0] = 90.000000 [1] y[0][1] = 90.000000 [1] y[1][1] = 90.000000 [1] y[2][1] = 90.000000 [1] y[3][1] = 90.000000 [1] y[4][1] = 90.000000 [1] y[5][1] = 90.000000 [1] y[6][1] = 90.000000 [1] y[7][1] = 90.000000 [1] y[8][1] = 90.000000 [1] y[9][1] = 90.000000 [1] y[10][1] = 90.000000 [1] y[11][1] = 90.000000 [1] y[12][1] = 90.000000 … … ‥(以下同様) #bf 名前 コメント
https://w.atwiki.jp/summoners-war/pages/341.html
imageプラグインエラー ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (サメ.png) 最大ステータス 体力: 攻撃力: 防御力: 攻撃速度 スキル1 スキル2 スキル3 パッシブ リーダースキル おすすめルーン構成 コメント(ルーン、運用等ご意見お待ちしております)